package clinsistem.c.repositorio;

import java.sql.ResultSet;
import java.sql.Statement;
import java.util.LinkedList;
import clinsistem.b.negocio.entidades.Consulta;
import clinsistem.b.negocio.entidades.Convenio;
import clinsistem.b.negocio.entidades.Data;
import clinsistem.b.negocio.entidades.Hora;
import clinsistem.b.negocio.entidades.Profissional;

public class RepositorioConsulta {
	
	public void excluirConsulta(int id) throws Exception {
		Statement stmt = null;
		stmt = ConexaoBD.getInstance().createStatement();
		
		stmt.execute("DELETE FROM consulta WHERE id = '"+id+"';");
	}
	
	public LinkedList<Consulta> listarConsultas(String loginProfissional, String data) throws Exception {
		Statement stmt = null;
		ResultSet rs = null;
		LinkedList<Consulta> lista = new LinkedList<Consulta>();
		
		stmt = ConexaoBD.getInstance().createStatement();
		
		rs = stmt.executeQuery("select paciente.id as id_paciente,consulta.convenio,consulta.id,consulta.hora,consulta.tipo,consulta.status,consulta.obs,consulta.pagamento,convenio.nome as nomeConvenio from consulta,paciente,convenio where consulta.convenio=convenio.cnpj and consulta.data = '"+data+"' AND profissional = (select profissional.cpf from profissional where profissional.login='"+loginProfissional+"') AND consulta.paciente=paciente.id;");
		
		
		while (rs.next()) {
			
			
			lista.add(new Consulta(rs.getInt("id"), new RepositorioPaciente().buscarPacienteID(rs.getInt("id_paciente")), new Data(data), new Hora(rs.getString("hora")), rs.getString("tipo"), rs.getFloat("pagamento"), rs.getString("status"), new Convenio(rs.getString("convenio"), rs.getString("nomeConvenio") ), rs.getString("obs") ));
		}
		
		return lista;
	}
	
	public boolean existe(Consulta consulta) throws Exception {
		Statement stmt = null;
		ResultSet rs = null;
		stmt = ConexaoBD.getInstance().createStatement();
		
		rs = stmt.executeQuery("SELECT * FROM consulta WHERE data = '"+consulta.getData()+"' AND hora = '"+consulta.getHora()+"' AND profissional = '"+consulta.getProfissional().getCpf()+"';");
		
		return rs.next();
	}
	
	public void marcarConsulta(Consulta consulta,String nome) throws Exception {
		Statement stmt = null;
		stmt = ConexaoBD.getInstance().createStatement();
		
		stmt.execute("INSERT INTO consulta (data,hora,tipo,status,obs,pagamento,profissional,paciente,convenio) VALUES ('"+consulta.getData()+"','"+consulta.getHora()+"','"+consulta.getTipo()+"','"+consulta.getStatus()+"','Marcada por "+nome+" em "+ retornarDataAtual()+ ". " +consulta.getObs()+"',"+consulta.getPagamento()+",'"+consulta.getProfissional().getCpf()+"','"+consulta.getPaciente().getMatricula()+"','"+consulta.getConvenio().getCnpj()+"');");
		
	}
	
	private String retornarDataAtual() throws Exception {
		Statement stmt = null;
		ResultSet rs= null;
		stmt = ConexaoBD.getInstance().createStatement();
		
		rs=stmt.executeQuery("SELECT current_date;");
		Data d=null;
		
		if (rs.next())
			d=new Data(rs.getString("date"));
		
		return d.getDia()+"/"+d.getMes()+"/"+d.getAno();
	}
	
	public void salvarConsulta(Consulta consulta) throws Exception {
		Statement stmt = null;
		stmt = ConexaoBD.getInstance().createStatement();
		
		stmt.execute("UPDATE consulta SET status='REALIZADA', texto = '"+consulta.getTexto()+"',anamnese='"+consulta.getAnamnese()+"' WHERE id="+consulta.getId()+";");
		
	}
	
	public LinkedList<Consulta> listarConsultasRealizadas(int idPaciente) throws Exception {
		Statement stmt = null;
		ResultSet rs=null;
		LinkedList<Consulta> lista = new LinkedList<Consulta>();
		stmt = ConexaoBD.getInstance().createStatement();
		
		rs=stmt.executeQuery("SELECT consulta.id,consulta.hora,consulta.data,consulta.tipo,consulta.texto,consulta.anamnese,usuario.nome,profissional.especialidade,profissional.registro,profissional.orgao_expedidor,profissional.cpf FROM consulta,usuario,profissional WHERE consulta.profissional=profissional.cpf AND profissional.login=usuario.login AND paciente = "+idPaciente+" AND consulta.status = 'REALIZADA' ORDER BY data DESC, hora DESC;");
		
		while (rs.next()) {
			Consulta c = new Consulta();
			c.setId(rs.getInt("id"));
			c.setHora(new Hora(rs.getString("hora")));
			c.setData(new Data(rs.getString("data")));
			c.setTipo(rs.getString("tipo"));
			c.setTexto(rs.getString("texto"));
			c.setAnamnese(rs.getString("anamnese"));
			
			Profissional p = new Profissional();
			p.setCpf(rs.getString("cpf"));
			p.setNome(rs.getString("nome"));
			p.setEspecialidade(rs.getString("especialidade"));
			p.setOrgaoExpeditorRegistro(rs.getString("orgao_expedidor"));
			p.setRegistro(rs.getString("registro"));
			
			c.setProfissional(p);
			
			c.setReceitas(new RepositorioReceita().receitasPorConsulta(c)); 
			
			lista.add(c);
		}
		
		return lista;
	}
	
}
